9 research outputs found

    Result Certification of Static Program Analysers with Automated Theorem Provers

    Get PDF
    International audienceThe automation of the deductive approach to program veri- fication crucially depends on the ability to efficiently infer and discharge program invariants. In an ideal world, user-provided invariants would be strengthened by incorporating the result of static analysers as untrusted annotations and discharged by automated theorem provers. However, the results of object-oriented analyses are heavily quantified and cannot be discharged, within reasonable time limits, by state-of-the-art auto- mated theorem provers. In the present work, we investigate an original approach for verifying automatically and efficiently the result of certain classes of object-oriented static analyses using off-the-shelf automated theorem provers. We propose to generate verification conditions that are generic enough to capture, not a single, but a family of analyses which encompasses Java bytecode verification and Fähndrich and Leino type- system for checking null pointers. For those analyses, we show how to generate tractable verification conditions that are still quantified but fall in a decidable logic fragment that is reducible to the Effectively Propositional logic. Our experiments confirm that such verification conditions are efficiently discharged by off-the-shelf automated theorem provers

    A Nelson-Oppen based Proof System using Theory Specific Proof Systems

    Get PDF
    International audienceSMT solvers are nowadays pervasive in verification tools. When the verification is about a critical system, the result of the SMT solver is also critical and cannot be trusted. The SMT-LIB 2.0 is a standard interface for SMT solvers but does not specify the output of the get-proof command. We present a proof system that is geared towards SMT solvers and follows their conceptually modular architecture. Our proof system makes a clear distinction between propositional and theory reasoning. Moreover, individual theories provide specific proof systems that are combined using the Nelson-Oppen proof scheme. We propose specific proof systems for linear real arithmetic (LRA) and uninterpreted functions (EUF) and discuss proof generation and proof checking. We have evaluated the cost of generating proofs in our proof system. Our experiments on benchmarks taken from the SMT-LIB library show that the simple mechanisms used in our approach suffice for a large majority of the selected benchmarks

    Analyse statique certifiée en logique du premier ordre multi-sortée

    No full text
    Static program analysis is a core technology for both verifying and finding errors in programs but most static analyzers are complex pieces of software that are not without error. A Static analysis formalised as an abstract interpreter can be proved sound, however such proofs are significantly harder to do on the actual implementation of an analyser. To alleviate this problem we propose to generate Verification Conditions (VCs, formulae valid only if the results of the analyser are correct) and to discharge them using an Automated Theorem Prover (ATP). We generate formulae in Many-Sorted First-Order Logic (MSFOL), a logic that has been successfully used in deductive program verification. MSFOL is expressive enough to describe the results of complex analyses and to formalise the operational semantics of object-oriented languages. Using the same logic for both tasks allows us to prove the soundness of the VC generator using deductive verification tools. To ensure that VCs can be automatically discharged for complex analyses of the heap, we introduce a VC calculus that produces formulae belonging to a decidable fragment of MSFOL. Furthermore, to be able to certify different analyses with the same calculus, we describe a family of analyses with a parametric concretisation function and instrumentation of the semantics. To improve the reliability of ATPs, we also studied the result certification of Satisfiability Modulo Theory solvers, a family of ATPs dedicated to MSFOL. We propose a modular proof-system and a modular proof-verifier programmed and proved correct in Coq, that rely on exchangeable verifiers for each of the underlying theories.L'analyse statique est utilisĂ©e pour vĂ©rifier de maniĂšre formelle qu'un programme ne fait pas d'erreurs, mais un analyseur statique est lui mĂȘme un programme complexe sujet aux erreurs. Une analyse statique formalisĂ©e comme un interpreteur abstrait peut ĂȘtre prouvĂ©e correcte, cependant un telle preuve ne porte pas directement sur l'implementation de l'analyseur. Pour rĂ©soudre cette difficultĂ©e, nous proposons de gĂ©nĂ©rer des conditions de vĂ©rification (VCs, des formules logiques valides seulement si le rĂ©sultat de l'analyseur est correct), et de les dĂ©charger Ă  l'aide d'un prouveur de thĂ©orĂšmes automatique (ATP). Les VCs gĂ©nĂ©rĂ©es appartiennent Ă  la logic du premier ordre multi-sortĂ©e (MSFOL), une logique utilisĂ©e avec succĂ©s en vĂ©rification dĂ©ductive, suffisament expressive pour encoder les rĂ©sultats d'analyses complexes et pour formaliser la sĂ©mantique operationnelle d'un langage objet, ce qui nous permet de prouver la correction des VCs gĂ©nĂ©rĂ©es Ă  l'aide d'outils de vĂ©rification deductive. Pour assurer que les VCs puissent ĂȘtre dĂ©chargĂ©e automatiquement pour des analyses du tas, nous introduisons un calcul de VCs appartenant Ă  un fragment dĂ©cidable de MSFOL, et afin de pouvoir utiliser le mĂȘme calcul pour diffĂ©rentes analyses, nous dĂ©crivons une famille d'analyses Ă  l'aide d'une fonction de concretisation et d'un instrumentation de la sĂ©mantique paramĂ©trĂ©es. Pour amĂ©liorer la fiabilitĂ© des ATPs, nous Ă©tudions aussi la certification de rĂ©sultat des proveurs de satisfiabilitĂ© modulo thĂ©ories, une famille d'ATPs dĂ©diĂ©e Ă  MSFOL. Nous proposons un systĂšme de preuve et un vĂ©rifieur modulaires, qui s'appuient sur des vĂ©rifieur dĂ©diĂ©s aux thĂ©ories sous-jacentes

    Analyse statique certifiée en logique du premier ordre multi-sortée

    No full text
    L'analyse statique est utilisĂ©e pour vĂ©rifier de maniĂšre formelle qu'un programme ne fait pas d'erreurs, mais un analyseur statique est lui mĂȘme un programme complexe sujet aux erreurs. Une analyse statique formalisĂ©e comme un interpreteur abstrait peut ĂȘtre prouvĂ©e correcte, cependant un telle preuve ne porte pas directement sur l'implementation de l'analyseur. Pour rĂ©soudre cette difficultĂ©e, nous proposons de gĂ©nĂ©rer des conditions de vĂ©rification (VCs, des formules logiques valides seulement si le rĂ©sultat de l'analyseur est correct), et de les dĂ©charger Ă  l'aide d'un prouveur de thĂ©orĂšmes automatique (ATP). Les VCs gĂ©nĂ©rĂ©es appartiennent Ă  la logic du premier ordre multi-sortĂ©e (MSFOL), une logique utilisĂ©e avec succĂ©s en vĂ©rification dĂ©ductive, suffisament expressive pour encoder les rĂ©sultats d'analyses complexes et pour formaliser la sĂ©mantique operationnelle d'un langage objet, ce qui nous permet de prouver la correction des VCs gĂ©nĂ©rĂ©es Ă  l'aide d'outils de vĂ©rification deductive. Pour assurer que les VCs puissent ĂȘtre dĂ©chargĂ©e automatiquement pour des analyses du tas, nous introduisons un calcul de VCs appartenant Ă  un fragment dĂ©cidable de MSFOL, et afin de pouvoir utiliser le mĂȘme calcul pour diffĂ©rentes analyses, nous dĂ©crivons une famille d'analyses Ă  l'aide d'une fonction de concretisation et d'un instrumentation de la sĂ©mantique paramĂ©trĂ©es. Pour amĂ©liorer la fiabilitĂ© des ATPs, nous Ă©tudions aussi la certification de rĂ©sultat des proveurs de satisfiabilitĂ© modulo thĂ©ories, une famille d'ATPs dĂ©diĂ©e Ă  MSFOL. Nous proposons un systĂšme de preuve et un vĂ©rifieur modulaires, qui s'appuient sur des vĂ©rifieur dĂ©diĂ©s aux thĂ©ories sous-jacentes.Static program analysis is a core technology for both verifying and finding errors in programs but most static analyzers are complex pieces of software that are not without error. A Static analysis formalised as an abstract interpreter can be proved sound, however such proofs are significantly harder to do on the actual implementation of an analyser. To alleviate this problem we propose to generate Verification Conditions (VCs, formulae valid only if the results of the analyser are correct) and to discharge them using an Automated Theorem Prover (ATP). We generate formulae in Many-Sorted First-Order Logic (MSFOL), a logic that has been successfully used in deductive program verification. MSFOL is expressive enough to describe the results of complex analyses and to formalise the operational semantics of object-oriented languages. Using the same logic for both tasks allows us to prove the soundness of the VC generator using deductive verification tools. To ensure that VCs can be automatically discharged for complex analyses of the heap, we introduce a VC calculus that produces formulae belonging to a decidable fragment of MSFOL. Furthermore, to be able to certify different analyses with the same calculus, we describe a family of analyses with a parametric concretisation function and instrumentation of the semantics. To improve the reliability of ATPs, we also studied the result certification of Satisfiability Modulo Theory solvers, a family of ATPs dedicated to MSFOL. We propose a modular proof-system and a modular proof-verifier programmed and proved correct in Coq, that rely on exchangeable verifiers for each of the underlying theories.CACHAN-ENS (940162301) / SudocSudocFranceF

    A Nelson-Oppen based Proof System using Theory Specific Proof Systems

    Get PDF
    SMT solvers are nowadays pervasive in verification tools. When the verification is about a critical system, the result of the SMT solver is also critical and cannot be trusted. The SMT-LIB 2.0 is a standard interface for SMT solvers but does not specify the output of the get-proof command. We present a proof system that is geared towards SMT solvers and follows their conceptually modular architecture. Our proof system makes a clear distinction between propositional and theory reasoning. Moreover, individual theories provide specific proof systems that are combined using the Nelson-Oppen proof scheme. We propose specific proof systems for linear real arithmetic (LRA) and uninterpreted functions (EUF) and discuss proof generation and proof checking. We have evaluated the cost of generating proofs in our proof system. Our experiments on benchmarks taken from the SMT-LIB library show that the simple mechanisms used in our approach suffice for a large majority of the selected benchmarks

    Result Certification of Static Program Analysers with Automated Theorem Provers

    Get PDF
    The automation of the deductive approach to program verification crucially depends on the ability to efficiently infer and discharge program invariants. In an ideal world, user-provided invariants would be strengthened by incorporating the result of static analysers as untrusted annotations and discharged by automated theorem provers. However, the results of object-oriented analyses are heavily quantified and cannot be discharged, within reasonable time limits, by state-of-the-art automated theorem provers. In the present work, we investigate an original approach for verifying automatically and efficiently the result of certain classes of object-oriented static analyses using off-the-shelf automated theorem provers. We propose to generate verification conditions that are generic enough to capture, not a single, but a family of analyses which encompasses Java bytecode verification and FĂ€hndrich and Leino type-system for checking null pointers. For those analyses, we show how to generate tractable verification conditions that are still quantified but fall in a decidable logic fragment that is reducible to the Effectively Propositional logic. Our experiments confirm that such verification conditions are efficiently discharged by off-the-shelf automated theorem provers
    corecore